# 数列
import inspect
import sys

sys.setrecursionlimit(3000)

"""
1
"""


def fixb(n):
    if (n == 1 or n == 2):
        return 1
    else:
        return fixb(n - 1) + fixb(n - 2)
print(fixb(3))

def fibonacci_recursive(n):
    if n <= 0:
        return 0
    elif n == 1:
        return 1
    else:
        return fibonacci_recursive(n-1) + fibonacci_recursive(n-2)

# 示例：输出前10项
for i in range(10):
    print(fibonacci_recursive(i), end=' ')

    #迭代方法
def fibonacci_iterative(n):
    a, b = 0, 1
    for _ in range(n):
        print(a, end=' ')
        a, b = b, a + b

# 示例：输出前10项
fibonacci_iterative(10)

#生成器方法
def fibonacci_generator():
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a + b

# 示例：输出前10项
gen = fibonacci_generator()
for _ in range(10):
    print(next(gen), end=' ')

#4. ​动态规划方法​
#动态规划通过存储中间结果避免重复计算，时间复杂度为O(n)，空间复杂度为O(n)，适合需要多次查询的场景
def fibonacci_dp(n):
    if n <= 1:
        return n
    dp = [0] * (n + 1)
    dp[1] = 1
    for i in range(2, n + 1):
        dp[i] = dp[i-1] + dp[i-2]
    return dp[n]

# 示例：输出前10项
for i in range(10):
    print(fibonacci_dp(i), end=' ')

#矩阵快速幂方法​
# 利用矩阵乘法快速计算斐波那契数列，时间复杂度为O(log n)，适合超大规模计算（如n>10^6）
import numpy as np

def fibonacci_matrix(n):
    matrix = np.array([[1, 1], [1, 0]], dtype='int64')
    result = np.linalg.matrix_power(matrix, n) @ np.array([[1], [0]])
    return result[0][0]

# 示例：输出第10项
print(fibonacci_matrix(10))

a =1000
def login(num):
    def count():
        print(num)
        print(f"这是a{a}")
        print("这是count")
    return count

res = login(101)
res.__closure__
print(res.__closure__)
#通过cell_contents属性访问闭包变量值
print(res.__closure__[0].cell_contents)
#通过inspect.getclosurevars访问
print(inspect.getclosurevars(res).nonlocals)

